/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Tiago
 */
public class DaoFilmes {
    
    
    private PreparedStatement preparededstmt;
    private Statement stmt;
    private ResultSet resultSet;
    private ConnectionFactory conexao;
    private Connection con;
    private String sql;
   
    public DaoFilmes() {
        
        this.stmt = null;
        this.resultSet = null;
        this.conexao = ConnectionFactory.getInstance();
        this.con = conexao.getConexao();


    }
    
    public ResultSet retornFilmes(String busca, int criterio) throws SQLException{
       
        if(busca.toString().isEmpty()){
           
        this.sql = "SELECT [Pk_intIdProduto] as [Código]\n" +
"                         ,[txtTitulo] as [Nome]\n" +
"                         ,CONVERT(varchar(20),datePrevisaoEntrega,103) as [Previsão Entrega]\n" +
"                  \n" +
"                     FROM [VIDEOLOCADORA].[dbo].[tabProduto]" ;
                 
                }
        if(!busca.isEmpty() && criterio== 1){
            
            busca = "Like '%"+busca+"%'";
        }       
              
       if(criterio== 0 && !busca.toString().isEmpty())
       {
           
           this.sql = "SELECT [Pk_intIdProduto] as [Código],[txtTitulo] as [Nome],[txtObservacao]as[Observação],"
                   + "CONVERT(varchar(20),datePrevisaoEntrega,103) as [Previsão Entrega]"
                   + " FROM [VIDEOLOCADORA].[dbo].[tabProduto]"
                   + " WHERE Pk_intIdProduto ="+busca;
           
       }
       else if(criterio== 1 && !busca.toString().isEmpty())
       {
          this.sql = "SELECT [Pk_intIdProduto] as [Código],[txtTitulo] as [Nome],[txtObservacao]as[Observação]"
                  + ",CONVERT(varchar(20),datePrevisaoEntrega,103) as [Previsão Entrega]\n" +
                    "FROM [VIDEOLOCADORA].[dbo].[tabProduto]\n" +
                    "WHERE txtTitulo  "+busca;
           System.out.println(this.sql);
       }
       
       try {
              
           this.stmt = ConnectionFactory.getConexao().createStatement();  
           this.resultSet = this.stmt.executeQuery( this.sql);  
           return this.resultSet;
        

       }catch(Exception e){
           System.out.println(e);
                   }
       return null;
          
               
    }
    public int excluirProduto(int idProduto){
        this.sql = "DELETE FROM [VIDEOLOCADORA].[dbo].[tabProduto]\n" +
                   "WHERE Pk_intIdProduto =" +idProduto;
                  
        System.out.println(sql);
        try {  
            this.stmt = ConnectionFactory.getConexao().createStatement();
            this.stmt.executeUpdate( this.sql);
            return 1;   
           
        } catch (SQLException ex) {
            Logger.getLogger(DaoFilmes.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }
       
    }
    
    public  ResultSet retornaCategorias() {
      
        try {
            this.sql = "SELECT * FROM tabCategoria";
            Statement pstm;


          pstm = ConnectionFactory.getConexao().createStatement();  
          this.resultSet = pstm.executeQuery( this.sql);  
          return this.resultSet;

        }
        catch (SQLException ex) {
          System.out.println("SQLException: " + ex.getMessage());
          System.out.println("SQLState: " + ex.getSQLState());
          System.out.println("VendorError: " + ex.getErrorCode());
          return this.resultSet;
        }
        catch (Exception e) {

          System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
          return this.resultSet;

        } 
   
       
    }
        public  ResultSet retornaTipo() {
      
        try {
            this.sql = "SELECT * FROM tabPrecoTipo";
            Statement pstm;


          pstm = ConnectionFactory.getConexao().createStatement();  
          this.resultSet = pstm.executeQuery( this.sql);  
          return this.resultSet;

        }
        catch (SQLException ex) {
          System.out.println("SQLException: " + ex.getMessage());
          System.out.println("SQLState: " + ex.getSQLState());
          System.out.println("VendorError: " + ex.getErrorCode());
          return this.resultSet;
        }
        catch (Exception e) {

          System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
          return this.resultSet;

        }
        }
        
        public int adicionaProduto(int Fk_intIdCategoria, int Fk_intIdpreco, String txtTitulo, String txtObservacao){
                this.sql = "INSERT INTO [VIDEOLOCADORA].[dbo].[tabProduto]\n" +
               "           ([Fk_intIdCategoria]\n" +
               "           ,[Fk_intIdpreco]\n" +
               "           ,[txtTitulo]\n" +
               "           ,[txtObservacao]\n" +
               "           ,[booAlugado]\n" +
               "           ,[booReservado])\n" +
               "     VALUES(?,?,?,?,?,?)";

               try {
               this.preparededstmt = ConnectionFactory.conexao.prepareStatement(this.sql);
               this.preparededstmt .setInt(1, Fk_intIdCategoria);         
               this.preparededstmt .setInt(2, Fk_intIdpreco);           
               this.preparededstmt .setString(3, txtTitulo);          
               this.preparededstmt .setString(4, txtObservacao);          
               this.preparededstmt .setInt(5, 0);        
               this.preparededstmt.setInt(6, 0);
               this.preparededstmt.executeUpdate();
               return 1;

            } catch (SQLException e) {
                System.out.println("Erro ao inserir Cliente "+ e);
                   return 0;
            }
    
        }
        public int efetuaReserva(int idCliente, int idProduto){

       this.sql = "INSERT INTO [VIDEOLOCADORA].[dbo].[tabReservas]\n" +
        "           ([Fk_intIdCliente]\n" +
        "           ,[Fk_intIdProduto]\n" +
        "           ,[dateDataReserva])\n" +
        "     VALUES(?,?,getDate())";
        try {
               this.preparededstmt = ConnectionFactory.conexao.prepareStatement(this.sql);
               this.preparededstmt .setInt(1, idCliente);         
               this.preparededstmt .setInt(2, idProduto);           
                    
               this.preparededstmt.executeUpdate();
               reservaProduto(idProduto);
               return 1;
                    
        } catch (SQLException ex) {
            Logger.getLogger(DaoFilmes.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }
              
            
        }
        public int reservaProduto(int idProduto){
            
            this.sql = "UPDATE [VIDEOLOCADORA].[dbo].[tabProduto]\n" +
            "   SET \n" +
            "      [booReservado] = 1 \n" +
            "      \n" +
            " WHERE Pk_intIdProduto = "+idProduto;
        
            System.out.println(this.sql);
        try {
            this.preparededstmt = ConnectionFactory.conexao.prepareStatement(this.sql);
             this.preparededstmt.executeUpdate();
             return 1;
        } catch (SQLException ex) {
            Logger.getLogger(DaoFilmes.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }
            
            
        }
}
        
    

